From: Jeroen van der Heijden Date: Fri, 21 Sep 2018 16:16:46 +0000 (+0200) Subject: Added flush buffer. X-Git-Tag: archive/raspbian/2.0.44-1+rpi1~1^2~3^2~8^2~82 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=2040d21055e427eaa35d8c6f97125f0327fdb342;p=siridb-server.git Added flush buffer. --- diff --git a/include/siri/db/buffer.h b/include/siri/db/buffer.h index 0c122c4f..50c30baa 100644 --- a/include/siri/db/buffer.h +++ b/include/siri/db/buffer.h @@ -15,6 +15,7 @@ #include #include #include +#include #define MAX_BUFFER_SZ 10485760 @@ -37,4 +38,7 @@ int siridb_buffer_write_point( uint64_t * ts, qp_via_t * val); +int siridb_buffer_fsync(siridb_t * siridb); + + #endif /* SIRIDB_BUFFER_H_ */ diff --git a/src/siri/db/buffer.c b/src/siri/db/buffer.c index b641407f..3306f39f 100644 --- a/src/siri/db/buffer.c +++ b/src/siri/db/buffer.c @@ -96,6 +96,12 @@ int siridb_buffer_new_series(siridb_t * siridb, siridb_series_t * series) BUFFER_create_new(siridb, series); } +int siridb_buffer_fsync(siridb_t * siridb) +{ + int buffer_fd = fileno(siridb->buffer_fp); + return (buffer_fd != -1) ? fsync(buffer_fd) : -1; +} + /* * Returns 0 if successful or -1 in case of an error. */ diff --git a/src/siri/db/insert.c b/src/siri/db/insert.c index 1cfe1712..1d992162 100644 --- a/src/siri/db/insert.c +++ b/src/siri/db/insert.c @@ -881,6 +881,7 @@ static void INSERT_local_task(uv_async_t * handle) siridb_insert_local_t * ilocal = (siridb_insert_local_t *) handle->data; qp_unpacker_t * unpacker = &ilocal->unpacker; + siridb_t * siridb; /* * we check for siri_err because siridb_series_add_point() @@ -900,7 +901,7 @@ static void INSERT_local_task(uv_async_t * handle) return; } - siridb_t * siridb = ilocal->siridb; + siridb = ilocal->siridb; if (siridb->buffer_fp == NULL && siridb_buffer_open(siridb)) { @@ -951,6 +952,7 @@ static void INSERT_local_task(uv_async_t * handle) ilocal->status = INSERT_LOCAL_ERROR; } } + uv_mutex_unlock(&siridb->series_mutex); uv_mutex_unlock(&siridb->shards_mutex); diff --git a/src/siri/heartbeat.c b/src/siri/heartbeat.c index cf6fde4f..6d557889 100644 --- a/src/siri/heartbeat.c +++ b/src/siri/heartbeat.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #if DEBUG @@ -92,5 +93,11 @@ static void HEARTBEAT_cb(uv_timer_t * handle __attribute__((unused))) siridb_node = siridb_node->next; } + + /* flush the buffer, maybe on each insert or another interval? */ + if (siridb_buffer_fsync(siridb)) + { + log_critical("fsync() has failed on the buffer file"); + } }